
本页面主要分享一下在竞赛中经常 / 很多人会出现的错误。

\begin{enumerate}
\item 由于运算符优先级产生的错误。
\begin{itemize}
\item \texttt{1 << 1+1} : 1 左移了 2，即该表达式返回的值是 \texttt{4}。
\item 由于宏的展开，且未加括号导致的错误：
\begin{cppcode}
#define pwr(x) x* x
pwr(2 + 2)
\end{cppcode}
该宏返回的值并非 $4^2 = 16$ 而是 $2+2\times 2+2 = 8$。
\end{itemize}
\item 文件操作有可能会发生的错误。
\begin{itemize}
\item 对拍时未清除文件指针即 \texttt{fclose(fp)} 就又令 \texttt{fp = fopen()}, 这会使得进程出现大量的文件野指针。
\item \texttt{freopen()} 中的文件名未加 \texttt{.in}/\texttt{.out}。
\end{itemize}
\item \texttt{int mian()}。
\item 无向图边表未开 2 倍。
\item 多组数据未清空数组。
\item 输出\texttt{double}要使用 \texttt{\%f} 而非 \texttt{\%lf}。 参考 \href{https://stackoverflow.com/questions/4264127/correct-format-specifier-for-double-in-printf}{链接}
\item 分治未判边界导致死递归。
\item 读入优化未判断负数。
\item 不正确地使用　\texttt{static} 修饰符。
\item \texttt{-1 >> 1 == 1}
\item 不正确地使用宏。
\texttt{\#define min(x,y) x<y?x:y}　如果这里的 \texttt{x} 或 \texttt{y} 是表达式，会被重复计算
\item 一些 OJ 上选择 \texttt{c++} 和 \texttt{g++} 提交得到的结果可能会不一样
\end{enumerate}
